iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
DevOps

從 0 開始培育成為自動化測試工程師的學習指南系列 第 6

Day 06: Python 的 Module 和 Package

  • 分享至 

  • xImage
  •  

學習原因:

ModulePackage 是 Python 的概念,類似於其他程式語言的 Library 。旨在讓常用的程式碼封裝再被其他程式碼應用,可以提高可讀性,重用性與維護性。對於日後想要從 0 到 1 建構專案,這種程式設計概念,非常重要。

學習目標:

  • 認識 Module 和 Package,並了解其重要性。
  • 認識有哪些常用的第三方 Package,以及如何套用。
  • 認識 Python 虛擬環境的作用

Module 模組

Module 就是一個 Python 檔,定義了一些 Data,Function 或是之後會介紹的 Class,可以被 匯入 (Import) 到其他程式被應用。

之前我們都在同一個檔案設定 variable 和 function,然後被同一檔案的主程式碼所應用。

但隨著專案的長大,將會出現多個 Python 檔案,而這些 Python 檔都需要共用一些 Function 的時候,我們會把共用的 Function 抽出寫成一個 Module,使可以被匯入到其他程式所應用。

以下一個例子建立一個 module 名為 module_sample.py ,然後被 main_a.pymain_b.py 應用

# module_sample.py

def num_sum(num_list):
	total = 0
	
	for num in num_list:
		total += num
        
    return total
# main_a.py

# 從 module_sample.py 匯入 num_sum()
from module_sample import num_sum

test_data = [1, 2, 3, 4]
# 主程式只需簡單應用匯入的 function 與數據即可
print(num_sum(test_data))
# main_b.py

from module_sample import num_sum

test_data = [2, 4, 6, 8]
print(num_sum(test_data))

執行 main_a.py 會得到 output:

10

執行 main_b.py 會得到 output:

20

Package 套件

而 Package 就像是一個 資料夾 包含了多個 Module,作用是把 Module 分類存放,可以整個被匯入其他程式被應用。而這個資料夾必須含有 __init__.py 才會被視為 Package。

  • __init__.py 可以是空的檔案。這個檔案的程式碼會被 Import 時執行,所以可以加入 Import 時想要執行的內容,例如導入依賴套件。
  • 若把上例的 Module 包成 Package,資料架構如下:
├── package_sample
	  ├── __init__.py
      └── sample_module.py
├── main_a.py
└── main_b.py

main_a.pymain_b.py 的 import 語法則需要改為:

# 從 package_sample 的 module_sample 取得 num_sum()

from sample_package.module_sample import num_sum

第三方套件

Module 和 Package 除了可以自建,也可以應用 Python 內建的函式庫 (Build-in Library) 或是第三方套件 (Third Party Library) ,可根據需求而安裝。使用第三方套件的 可以節省時間和工作量,因為這些套件已包含大量功能和工具,只需要應用便可。而且這些第三方套件一般都由經驗豐富的開發人員編寫和維護,因此它們往往 是高質量,且經過測試的程式碼

安裝套件的方法有很多,比較常用的會是透過 pip安裝,安裝 Python 時就會自動包含 pip 了。

常用的 pip 指令如下:

pip install <package>  			    #安裝套件
pip install <package>==<version>  	#安裝指定版本的套件 
pip install --upgrade <package>    	#升級套件版本
pip uninstall <package>    		    #移除套件
pip list    				        #查看目前安裝的套件
pip show <package>  			    #查看套件訊息

在程式中應用時,只需要 import 即可使用:

import <package>

介紹一下 Automation Test 常用的第三方套件:

Package 用途
pandas 主要作資料的處理和分析,讀寫 Excel 等
faker 用來製作假資料,如 Email, Username, Password 等等,對測試非常實用
pillow 圖形處理,可用來比對圖片
requests HTTP 請求套件,用於發送 HTTP 請求和處理 HTTP 響應。它簡化了進行網絡通信的過程,讓你能夠更輕鬆地進行 HTTP GET、POST 和其他各種類型的請求
pymysql 處理 MySQL Database 的操作
sqlalchemy 處理 SQL Database 的操作

小提醒:Python 檔案的命名,避免跟套件的名字相同,將會取代套件被應用。
例如檔案命名為 selenium.py ,然後裡面又應用 selenium 的套件,結果會出現 Circular Import (循環導入) 的錯誤訊息

# selenium.py

import selenium

driver = selenium.webdriver.Chrome()
driver.get("http://google.com/")

Output:

AttributeError: partially initialized module 'selenium' has no attribute 'webdriver' (most likely due to a circular import)

Python 的虛擬環境

Python 的 虛擬環境(Virtual Environment)是一種用於隔離 Python 版本以及其依賴的工具。它允許你在同一台電腦上創建多個獨立的 Python 環境,每個環境都可以具有不同的 Python 版本和 Package,而不會互相干擾。所以需要習慣為各個專案建立 Python 虛擬環境,分別針對專案安裝不同的 Package 來執行專案的程式。

創建和管理虛擬環境一般都會使用 Python 內置的 venv 套件或者第三方套件/工具,如virtualenvcondaPoetry

在 PyCharm 建立新專案時就可以選用需要的虛擬環境:
https://ithelp.ithome.com.tw/upload/images/20230911/201620389z4oqH9Huz.png

亦可用指令操作虛擬環境,以下是 venv 常見的虛擬環境管理操作:

python -m venv <env_name>          # 建立虛擬環境,名為 <env_name>
source <env_name>/bin/activate     # 啟用虛擬環境 <env_name>
deactivate                         # 停用虛擬環境

ModulePackage 最主要的概念是把常用的 Function / Test Data 抽成共用,再把程式碼分門別類的存放,大大提高可 重用性可讀性可維護性

再者可以應用 第三方的 Package,應用開發完善的工具,可以大幅減少開發的工作量和時間,但需要注意到 Package 之間的依賴性。為避免各個專案需要用到不同的套件,或是不同版本的套件時發生衝突,我們需要用到獨立的 虛擬環境 把執行環境分隔。


上一篇
Day 05: 演算法與 Big O Notation
下一篇
Day 07: Python 對 Excel 的應用
系列文
從 0 開始培育成為自動化測試工程師的學習指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言